home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / lang / sofa.lha / sofa / smalleiffel / lib_se / tmp_name.e < prev    next >
Text File  |  2000-03-25  |  9KB  |  297 lines

  1. --          This file is part of SmallEiffel The GNU Eiffel Compiler.
  2. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  3. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr
  4. --                       http://SmallEiffel.loria.fr
  5. -- SmallEiffel is  free  software;  you can  redistribute it and/or modify it
  6. -- under the terms of the GNU General Public License as published by the Free
  7. -- Software  Foundation;  either  version  2, or (at your option)  any  later
  8. -- version. SmallEiffel is distributed in the hope that it will be useful,but
  9. -- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. -- or  FITNESS FOR A PARTICULAR PURPOSE.   See the GNU General Public License
  11. -- for  more  details.  You  should  have  received a copy of the GNU General
  12. -- Public  License  along  with  SmallEiffel;  see the file COPYING.  If not,
  13. -- write to the  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  14. -- Boston, MA 02111-1307, USA.
  15. --
  16. expanded class TMP_NAME
  17.    --
  18.    -- Singleton object used by `eiffel_parser' to have a temporary storage of
  19.    -- an unkown name during syntax analysis.
  20.    --
  21.  
  22. inherit GLOBALS;
  23.  
  24. feature {EIFFEL_PARSER}
  25.  
  26.    buffer: STRING is "                                                 ";
  27.  
  28.    start_position: POSITION;
  29.  
  30.    line: INTEGER is
  31.       do
  32.          Result := start_position.line;
  33.       end;
  34.  
  35.    column: INTEGER is
  36.       do
  37.          Result := start_position.column;
  38.       end;
  39.  
  40.    reset(sp: like start_position) is
  41.       do
  42.          start_position := sp;
  43.          buffer.clear;
  44.          aliased_string_memory := Void;
  45.       end;
  46.  
  47.    extend(ch: CHARACTER) is
  48.       do
  49.          buffer.extend(ch);
  50.       end;
  51.  
  52.    is_current: BOOLEAN is
  53.       do
  54.          if buffer.count = 7 then
  55.             Result := as_current.same_as(buffer);
  56.          end;
  57.       end;
  58.  
  59.    is_result: BOOLEAN is
  60.       do
  61.          if buffer.count = 6 then
  62.             Result := as_result.same_as(buffer);
  63.          end;
  64.       end;
  65.  
  66.    is_void: BOOLEAN is
  67.       do
  68.          if buffer.count = 4 then
  69.             Result := as_void.same_as(buffer);
  70.          end;
  71.       end;
  72.  
  73.    aliased_string: STRING is
  74.       do
  75.          if aliased_string_memory = Void then
  76.             aliased_string_memory := string_aliaser.item(buffer);
  77.          end;
  78.          Result := aliased_string_memory;
  79.       end;
  80.  
  81.    isa_keyword: BOOLEAN is
  82.       local
  83.          c: CHARACTER;
  84.       do
  85.          c := buffer.first.to_lower;
  86.          inspect
  87.             c
  88.          when 'a' then
  89.             if fz_alias.same_as(buffer) then
  90.                Result := true;
  91.             elseif fz_all.same_as(buffer) then
  92.                Result := true;
  93.             elseif as_and.same_as(buffer) then
  94.                Result := true;
  95.             else
  96.                Result := fz_as.same_as(buffer);
  97.             end;
  98.          when 'c' then
  99.             if fz_check.same_as(buffer) then
  100.                Result := true;
  101.             elseif fz_class.same_as(buffer) then
  102.                Result := true;
  103.             elseif fz_create.same_as(buffer) then
  104.            eh.add_position(start_position);
  105.            eh.append("In order to be ready for the new Eiffel %
  106.              %definition, you should avoid the %"create%" %
  107.                          %feature name because it may be used as a new %
  108.                          %keyword in the next ETL definition.");
  109.            eh.print_as_warning;
  110.                -- *** Waiting modification of ETL : Result := true;
  111.  
  112.             else
  113.                Result := fz_creation.same_as(buffer);
  114.             end;
  115.          when 'd' then
  116.             if fz_debug.same_as(buffer) then
  117.                Result := true;
  118.             elseif fz_deferred.same_as(buffer) then
  119.                Result := true;
  120.             else
  121.                Result := fz_do.same_as(buffer);
  122.             end;
  123.          when 'e' then
  124.             if fz_else.same_as(buffer) then
  125.                Result := true;
  126.             elseif fz_elseif.same_as(buffer) then
  127.                Result := true;
  128.             elseif fz_end.same_as(buffer) then
  129.                Result := true;
  130.             elseif fz_ensure.same_as(buffer) then
  131.                Result := true;
  132.             elseif fz_expanded.same_as(buffer) then
  133.                Result := true;
  134.             elseif fz_export.same_as(buffer) then
  135.                Result := true;
  136.             else
  137.                Result := fz_external.same_as(buffer);
  138.             end;
  139.          when 'f' then
  140.             if fz_false.same_as(buffer) then
  141.                Result := true;
  142.             elseif fz_feature.same_as(buffer) then
  143.                Result := true;
  144.             elseif fz_from.same_as(buffer) then
  145.                Result := true;
  146.             else
  147.                Result := fz_frozen.same_as(buffer);
  148.             end;
  149.          when 'i' then
  150.             if fz_if.same_as(buffer) then
  151.                Result := true;
  152.             elseif as_implies.same_as(buffer) then
  153.                Result := true;
  154.             elseif fz_indexing.same_as(buffer) then
  155.                Result := true;
  156.             elseif fz_infix.same_as(buffer) then
  157.                Result := true;
  158.             elseif fz_inherit.same_as(buffer) then
  159.                Result := true;
  160.             elseif fz_inspect.same_as(buffer) then
  161.                Result := true;
  162.             elseif fz_invariant.same_as(buffer) then
  163.                Result := true;
  164.             else
  165.                Result := fz_is.same_as(buffer);
  166.             end;
  167.          when 'l' then
  168.             if fz_like.same_as(buffer) then
  169.                Result := true;
  170.             elseif fz_local.same_as(buffer) then 
  171.                Result := true;
  172.             else
  173.                Result := fz_loop.same_as(buffer);
  174.             end;
  175.          when 'o' then
  176.             if fz_obsolete.same_as(buffer) then
  177.                Result := true;
  178.             elseif fz_old.same_as(buffer) then
  179.                Result := true;
  180.             elseif fz_once.same_as(buffer) then 
  181.                Result := true;
  182.             else
  183.                Result := as_or.same_as(buffer);
  184.             end;
  185.          when 'p' then
  186.             if as_precursor.same_as(buffer) then 
  187.                Result := true;
  188.             else
  189.                Result := fz_prefix.same_as(buffer);
  190.             end;
  191.          when 'r' then
  192.             if fz_redefine.same_as(buffer) then 
  193.                Result := true;
  194.             elseif fz_rename.same_as(buffer) then 
  195.                Result := true;
  196.             elseif fz_require.same_as(buffer) then 
  197.                Result := true;
  198.             elseif fz_rescue.same_as(buffer) then 
  199.                Result := true;
  200.             else
  201.                Result := fz_retry.same_as(buffer);
  202.             end;
  203.          when 's' then
  204.             if fz_select.same_as(buffer) then 
  205.                Result := true;
  206.             elseif fz_separate.same_as(buffer) then 
  207.                Result := true;
  208.             else
  209.                Result := fz_strip.same_as(buffer);
  210.             end;
  211.          when 't' then
  212.             if fz_then.same_as(buffer) then
  213.                Result := true;
  214.             else
  215.                Result := fz_true.same_as(buffer);
  216.             end;
  217.          when 'u' then
  218.             if fz_undefine.same_as(buffer) then 
  219.                Result := true;
  220.             elseif fz_unique.same_as(buffer) then 
  221.                Result := true;
  222.             else
  223.                Result := fz_until.same_as(buffer);
  224.             end;
  225.          when 'v' then
  226.             Result := fz_variant.same_as(buffer);
  227.          when 'w' then
  228.             Result := fz_when.same_as(buffer);
  229.          when 'x' then
  230.             Result := as_xor.same_as(buffer);
  231.          else
  232.          end;
  233.       end;
  234.  
  235.    to_argument_name1: ARGUMENT_NAME1 is
  236.       do
  237.          !!Result.make(start_position,aliased_string);
  238.       end;
  239.  
  240.    to_argument_name2(fal: FORMAL_ARG_LIST; rank: INTEGER): ARGUMENT_NAME2 is
  241.       do
  242.          !!Result.refer_to(start_position,fal,rank);
  243.       end;
  244.  
  245.    to_class_name: CLASS_NAME is
  246.       do
  247.          !!Result.make(aliased_string,start_position);
  248.       end;
  249.  
  250.    to_e_void: E_VOID is
  251.       require
  252.          is_void
  253.       do
  254.          !!Result.make(start_position);
  255.       end;
  256.  
  257.    to_simple_feature_name: SIMPLE_FEATURE_NAME is
  258.       do
  259.          !!Result.make(aliased_string,start_position);
  260.       end;
  261.  
  262.    to_infix_name_use: INFIX_NAME is
  263.       do
  264.          !!Result.make(aliased_string,start_position);
  265.       end;
  266.  
  267.    to_infix_name(sp: POSITION): INFIX_NAME is
  268.       do
  269.          !!Result.make(aliased_string,sp);
  270.       end;
  271.  
  272.    to_local_name1: LOCAL_NAME1 is
  273.       do
  274.          !!Result.make(start_position,aliased_string);
  275.       end;
  276.  
  277.    to_local_name2(lvl: LOCAL_VAR_LIST; rank: INTEGER): LOCAL_NAME2 is
  278.       do
  279.          !!Result.refer_to(start_position,lvl,rank);
  280.       end;
  281.  
  282.    to_prefix_name: PREFIX_NAME is
  283.       do
  284.          !!Result.make(aliased_string,start_position);
  285.       end;
  286.  
  287.    to_tag_name: TAG_NAME is
  288.       do
  289.          !!Result.make(aliased_string,start_position);
  290.       end;
  291.  
  292. feature {NONE}
  293.  
  294.    aliased_string_memory: STRING;
  295.  
  296. end -- TMP_NAME
  297.